package com.lyf.aop.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @AUTHOR LYF
 * @DATE 2022/2/12
 * @VERSION 1.0
 * @DESC
 */
public class MainCall {
    public static void main(String[] args) {
        // 代理对象:类加载器,接口方法,
        Class[] interfaces = {UserService.class};//interfaces
        // classLoader??随意哪个类的都可以》》？
        UserService userService = (UserService) Proxy.newProxyInstance(JDKProxyObject.class.getClassLoader(),
              interfaces,new JDKProxyObject(new UserServiceImpl()));//UserService.class.getInterfaces()
        userService.login("hello","hello");

    }
}
//
//class JDKProxyObject implements InvocationHandler {
//
//    private Object object;// 传入对象
//
//    /**
//     * @param object
//     */
//    public JDKProxyObject(Object object) {
//       // this.object = object;
//        this.object = object;
//    }
//
//    /**
//     * @param proxy 需要进行添加功能的对象
//     * @param method 传入的方法（pointcut?:切入点)
//     * @param args 传入方法的参数
//     * @return
//     * @throws Throwable
//     */
//    @Override
//    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//        System.out.println("执行:"+method.getName());
//        //interceptor(args);
//        Object val = method.invoke(object,args);// 反射，根据方法和对象执行该方法
//        System.out.println("执行结果"+val);
//        //auth(args);
//        return null;
//    }
//    public boolean interceptor(Object[]args){
//        // return ;
//        System.out.println("登录之前拦截....");
//        return true;
//    }
//    public boolean auth(Object[]args){
//        System.out.println("登录后权限校验....");
//        return true;
//    }
//}
